package bl.document;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

import o.进货单据类型;
import po.DocumentPo;
import po.Po;
import po.SystemLogPo;
import po.商品列表单项po;
import po.进退货单po;
import vo.DocumentVo;
import vo.Vo;
import vo.CommodityListItemVo;
import vo.ImportAndReturnDocumentVo;
import dbservice.document.DocumentDBService;
import dbservice.history.SystemLogDBService;

public class ImportAndReturnDocumentBL extends DocumentBL{
	
	private static final long serialVersionUID = 5909964776187334790L;

	public ImportAndReturnDocumentBL(DocumentDBService documentDB,SystemLogDBService log) throws RemoteException {
		super(documentDB,log);
		// TODO Auto-generated constructor stub
	}

   public ImportAndReturnDocumentVo _vo(进退货单po po){
	   ImportAndReturnDocumentVo vo=new ImportAndReturnDocumentVo();
	   vo.set单据编号(po.get单据编号());
	   vo.set仓库(po.get仓库());
	   vo.set客户(po.get客户());
	   vo.set总额(po.get总额());
	   vo.setOperator(po.get操作员());
	   vo.set业务员(po.get业务员());
	   vo.set类型(po.get类型());
	   vo.set备注(po.get备注());
	   List<商品列表单项po> po_list=po.get入库商品列表();
	   List<CommodityListItemVo> vo_list=new ArrayList<CommodityListItemVo>();
	   for(int i=0;i<po_list.size();i++){
		   CommodityListItemVo item=new CommodityListItemVo(po_list.get(i).get商品编号(),po_list.get(i).get商品名称(),po_list.get(i).get商品型号(),po_list.get(i).get数量(),po_list.get(i).get单价(),po_list.get(i).get金额(),po_list.get(i).get备注());
	       vo_list.add(item);
	   }
	   vo.set入库商品列表(vo_list);
	   return vo;
   }
   public 进退货单po _po(ImportAndReturnDocumentVo vo){
	  进退货单po po=new 进退货单po();
	  po.set单据编号(vo.get单据编号());
	  po.set仓库(vo.get仓库());
	  po.set客户(vo.get客户());
	  po.set总额(vo.get总额());
	  po.set操作员(vo.getOperator());
	  po.set类型(vo.get类型());
	  po.set备注(vo.get备注());
	  po.setType(vo.isType());
	  List<CommodityListItemVo> list=vo.get入库商品列表();
	  List<商品列表单项po> item=new ArrayList<商品列表单项po>();
	  for(int i=0;i<list.size();i++){
		  商品列表单项po item_po=new 商品列表单项po(list.get(i).get商品编号(),list.get(i).get商品名称(),list.get(i).get商品型号(),list.get(i).get数量(),list.get(i).get单价(),list.get(i).get金额(),list.get(i).get备注());
		  item.add(item_po);
	  }
	  po.set入库商品列表(item);
	  return po;
   }
   public DocumentPo _po(DocumentVo vo){
	   DocumentPo po=new DocumentPo();
	   po.set客户(vo.get客户());
	   po.setDate(vo.getDate());
	   po.set业务员(vo.get业务员());
	   po.setType(vo.isType());
	   po.set仓库(vo.get仓库());
	   return po;
   }
	@Override
	public Vo approve(DocumentVo document) {
		Po po=documentDB.approve(_po((ImportAndReturnDocumentVo)document));
		Vo vo=new Vo();
		if(po.isSuccessed()){
			vo.successed();
		}else{
			vo.failed(po.getFailMessage());
		}
		return vo;
	}

	@Override
	public Vo add(DocumentVo document) {
		Po po=documentDB.add(_po((ImportAndReturnDocumentVo) document));
		Vo vo=new Vo();
		if(po.isSuccessed()){
			vo.successed();
		}
		else{
		    vo.failed(po.getFailMessage());
		    log.add(new SystemLogPo(((ImportAndReturnDocumentVo)document).getOperator(), "添加",((ImportAndReturnDocumentVo)document).get类型()==进货单据类型.进货单? "进货单":"进货退货单"));
		}
		return vo;
	}

	@Override
	public Vo update(DocumentVo document) {
		Po po=documentDB.update(_po((ImportAndReturnDocumentVo) document));
		Vo vo=new Vo();
		if(po.isSuccessed()){
			vo.successed();
		}
		else{
		    vo.failed(po.getFailMessage());
		}
		return vo;
	}

	@Override
	public List<DocumentVo> get(DocumentVo from, DocumentVo to) {
		List<DocumentPo> po=documentDB.get(_po(from), _po(to));
		List<DocumentVo> vo=new ArrayList<DocumentVo> ();
		for(int i=0;i<po.size();i++){
			vo.add(_vo((进退货单po) po.get(i)));
		}
		return vo;
	}

	@Override
	public List<DocumentVo> getUnapproval() {
		List<DocumentPo> po=documentDB.getUnapproval();
		List<DocumentVo> vo=new ArrayList<DocumentVo> ();
		for(int i=0;i<po.size();i++){
			vo.add(_vo((进退货单po) po.get(i)));
		}
		return vo;
	}

	@Override
	public Vo redRush(DocumentVo document) {
		Vo vo=new Vo();
		List<CommodityListItemVo> list=((ImportAndReturnDocumentVo)document).get入库商品列表();
		for(int i=0;i<list.size();i++){
			list.get(i).set数量(-list.get(i).get数量());
			list.get(i).set金额(-list.get(i).get金额());
		}
		((ImportAndReturnDocumentVo)document).set总额(-((ImportAndReturnDocumentVo)document).get总额());
		Vo r=add(document);
		if(r.isSuccessed()){
			vo.successed();
			 log.add(new SystemLogPo(((ImportAndReturnDocumentVo)document).getOperator(), "红冲",((ImportAndReturnDocumentVo)document).get单据编号()));
		}else{
			vo.failed(r.getFailMessage());
		}
		return vo;
	}

	

}
